人客啊~精采的正要開始~
重點:
wiselou提到:
精采的正要開始
有辣妹嗎??...
iT邦幫忙MVPcdfu提到:
辣妹
辣妹都名花有煮了...
煮熟的也可以吃呀...
cdfu提到:
煮熟的也可以吃
煮熟的也會飛走啊....
努力離題中...
wiselou提到:
煮熟的也會飛走啊....
飛走可以再打下來呀...
步驟一:當然...是...把rdlc報表檔做好....
步驟二:開始寫程式~~
<pre class="c" name="code">
public ActionResult Report(){
LocalReport localReport = new LocalReport() { ReportPath = Server.MapPath("~/Reports/Report1.rdlc") };
ReportDataSource reportDataSource = new ReportDataSource("DataSet1", GetProducts());
localReport.DataSources.Add(reportDataSource);
string reportType = "PDF";
string mimeType,encoding,fileNameExtension;
Warning[] warings;
String[] streams;
byte[] renderedBytes;
string deviceInfo = "<DeviceInfo>" +
" <OutputFormat>PDF</OutputFormat>" +
" <PageWidth>11.69in</PageWidth>" +
" <PageHeight>8.27in</PageHeight>" +
" <MarginTop>0.5in</MarginTop>" +
" <MarginLeft>0.5in</MarginLeft>" +
" <MarginRight>0.5in</MarginRight>" +
" <MarginBottom>0.5in</MarginBottom>" +
"</DeviceInfo>";
ㄟ...好像太長了...
LocalReport localReport = new LocalReport() { ReportPath = Server.MapPath("~/Reports/Report1.rdlc") };
這一行的目的,是載入rdlc報表
ReportDataSource reportDataSource = new ReportDataSource("DataSet1", GetProducts());
這個是載入報表的資料來源,GetProducts是自己寫的一個method,傳回List<Models.Products>,這個部分,可以依需求自己寫,或把整理好的dataset傳遞給報表。
string mimeType,encoding,fileNameExtension;
Warning[] warings;
String[] streams;
byte[] renderedBytes;
這些,是用來承接LocalReport傳出的參數資料
LocalReport類別
接續上面的code
<pre class="c" name="code">
renderedBytes = localReport.Render(reportType, deviceInfo, out mimeType, out encoding, out fileNameExtension, out streams, out warings);
Response.Clear();
Response.ContentType = mimeType;
Response.AddHeader("content-disposition", "attachment; filename=report." + fileNameExtension);
Response.BinaryWrite(renderedBytes);
Response.End();
return View();
}
renderedBytes = localReport.Render(reportType, deviceInfo, out mimeType, out encoding, out fileNameExtension, out streams, out warings);
這一行,輸出報表...
Response.AddHeader("content-disposition", "attachment; filename=report." + fileNameExtension);
這裡加上attachment,主要是讓user下載PDF檔,因為...避免因為user端未安裝PDF reader造成問題
使用這種方式,務必記得,要把上述兩個dll檔一併發佈到web server上,
最簡單的方式,就是...在server上安裝...Microsoft 報表檢視器 2010 SP1 可轉散發套件
當然,搭配Microsoft Report還有其他作法。
最簡單的就是把傳統ASP.Net WebForm的網頁,加到MVC的routing
這樣的作法有個好處,就是user可以透過ReportViewer線上檢視、列印報表,如同傳統的WebForm一般。
偶個人認為,沒有哪個比較好或不好,只是分享一下自己實作的心得而已~
還有看過另一種方式,用iTextSharp函式庫產生PDF檔案,這個...就有點辛苦了...
ASP.Net MVC 3(Razor Engine)搭配 Microsoft Report
全部都沒用過
純推不下